<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:parser="http://kadm.com.ua/XMLSchema/Parser" xmlns="http://kadm.com.ua/XMLSchema/Grammar"
  xmlns:t="http://kadm.com.ua/XMLSchema/Indented-text" xmlns:set="http://kadm.com.ua/XMLSchema/Set">
  <xsl:output method="xml" indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="text()"/>

  <xsl:template match="@*"/>

  <xsl:template match="/parser:table">
    <t:file>
      <t:l>array(</t:l>
      <t:block>
        <xsl:apply-templates/>
      </t:block>
      <t:l>)</t:l>
    </t:file>
  </xsl:template>

  <xsl:template match="parser:row">
    <t:l><xsl:value-of select="@parser:state"/> =&gt; array(</t:l>
    <t:block>
      <t:l>
        <xsl:text>"node" =&gt; </xsl:text>
        <xsl:choose>
          <xsl:when test="@parser:node">
            <xsl:text>"</xsl:text>
            <xsl:value-of select="@parser:node"/>
            <xsl:text>"</xsl:text>
          </xsl:when>
          <xsl:otherwise>null</xsl:otherwise>
        </xsl:choose>
        <xsl:text>,</xsl:text>
      </t:l>
      <t:l>"transitions" =&gt; array(</t:l>
      <t:block>
        <xsl:apply-templates/>
      </t:block>
      <t:l>)</t:l>
    </t:block>
    <t:l>),</t:l>
  </xsl:template>

  <xsl:template match="parser:transition">
    <t:l>
      <xsl:text>array("optional" =&gt; </xsl:text>
      <xsl:choose>
        <xsl:when test="@optional">
          <xsl:value-of select="@optional"/>
        </xsl:when>
        <xsl:otherwise>false</xsl:otherwise>
      </xsl:choose>
      <xsl:text>, "repeat" =&gt; </xsl:text>
      <xsl:choose>
        <xsl:when test="@repeat">
          <xsl:value-of select="@repeat"/>
        </xsl:when>
        <xsl:otherwise>false</xsl:otherwise>
      </xsl:choose>
      <xsl:text>, "state" =&gt; </xsl:text>
      <xsl:choose>
        <xsl:when test="@parser:ref">
          <xsl:value-of select="@parser:ref"/>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
      <xsl:text>, "set" =&gt; </xsl:text>
      <xsl:choose>
        <xsl:when test="@parser:set">
          <xsl:value-of select="@parser:set"/>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
      <xsl:text>, "literal" =&gt; </xsl:text>
      <xsl:choose>
        <xsl:when test="@parser:literal">
          <xsl:text>'</xsl:text>
          <xsl:value-of
            select="translate(translate(@parser:literal, '\', '\\'), &quot;'&quot;, &quot;\'&quot;)"/>
          <xsl:text>'</xsl:text>
        </xsl:when>
        <xsl:otherwise>null</xsl:otherwise>
      </xsl:choose>
      <xsl:text>),</xsl:text>
    </t:l>
  </xsl:template>
</xsl:stylesheet>
